package com.xiaoda.dao;

import com.xiaoda.entity.Comment;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface CommentDao {

    /**
     * 查询所有评论
     *
     * @return 评论列表
     */
    List<Comment> findAll();

    /**
     * 查询指定 id 的评论，对象不完整
     *
     * @param id 评论 id
     * @return 评论对象
     */
    Comment findById(int id);

    /**
     * 查询指定 id 的评论，对象完整
     *
     * @param id 评论 id
     * @return 评论对象
     */
    Comment findByIdFull(int id);

    /**
     * 查询文章被评论次数
     *
     * @param toAid 文章 id
     * @return 评论次数
     */
    int commentArticleNum(int toAid);

    /**
     * 查询指定用户发表的评论
     *
     * @param fromUid 用户 id
     * @return 评论列表
     */
    List<Comment> findAllByUid(String fromUid);

    /**
     * 统计评论数量
     *
     * @param account 用户 id
     * @return 评论数量
     */
    int countCommentNum(String account);

    /**
     * 添加评论
     *
     * @param comment 评论对象
     * @return 影响行数
     */
    int addComment(Comment comment);

    /**
     * 查询所有评论，并关联用户
     *
     * @param id 评论 id
     * @return 评论列表
     */
    List<Comment> findAllComments(int id);

    /**
     * 删除评论
     *
     * @param uid 用户 id
     * @return 删除行数
     */
    int deleteByUid(String uid);

    /**
     * 删除文章评论
     *
     * @param aid 文章 id
     * @return 删除行数
     */
    int deleteByAid(int aid);

    /**
     * 查询评论
     *
     * @param map 查询条件
     * @return 评论列表
     */
    List<Comment> searchComment(Map<String, Object> map);

    /**
     * 更新评论
     *
     * @param map 评论对象
     * @return 更新行数
     */
    int updateComment(Map<String, Object> map);

    /**
     * 删除评论
     *
     * @param id 评论 id
     * @return 删除行数
     */
    int deleteComment(int id);

    /**
     * 修改评论
     *
     * @param id 评论 id
     * @return 修改行数
     */
    int updateCommentById(int id);

}
